Computing systems—i.e. devices capable of processing electronic data such as computers, telephones, Personal Digital Assistants (PDA), etc.—communicate with other computing systems by exchanging data messages according to a communications protocol that is recognizable by the systems. A system utilizes filters to analyze messages that are sent and/or received by the system and to determine if and how the messages will be processed further.
Filter engines are used to process a diverse assortment of documents and messages against one or more filters, or queries. A filter engine may also be called an “inverse query engine.” Unlike a database, wherein an input query is tried against a collection of data records, an inverse query engine inputs a data message that is tried against a collection of queries.
Most systems that utilize filter engines for processing documents and messages store multiple filters in one or more filter tables which are accessed by a filter engine when the filter engine receives an input. But the filter tables may contain thousands of entries and testing an input against each of the filters can consume a significant amount of system resources.
Filter engines developed for general use must comply with a certain language (or standard) if they are to be of use to a wide variety of applications. Compliance with a programming language requires that each and every aspect of the language be supported by a filter engine, even if most of the features provided in the language will never—or almost never—be used by some applications.
A custom filter engine may be developed for a particular application so that the filter engine is streamlined to be faster and use less system overhead. However, developing a custom filter engine adds a great deal of effort to development of an associated application and, therefore, is usually not an option preferred by developers.
Developers are therefore faced with a problem of either using a general filter engine that supports an entire language but is inefficient, or developing a custom filter engine that only support aspects of a language expected to be encountered in a specific application and is therefore more efficient.